package perucuy.dao.sqlmap;

import java.io.Reader;

import org.apache.log4j.Logger;
import perucuy.dao.RacionDAO;
import perucuy.dao.TareaDAO;
import perucuy.dao.UbicacionDAO;
import perucuy.dao.UsuarioDAO;
import perucuy.dao.DAOFactory;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import perucuy.dao.ConsultaDAO;
import perucuy.dao.NucleoDAO;
import perucuy.dao.ParametroDAO;
import perucuy.dao.PartoDAO;
import perucuy.dao.NutrienteDAO;
import perucuy.dao.AlertaDAO;
import perucuy.dao.ReproductoraDAO;

public class SqlMapDAOFactory extends DAOFactory {
    private static final Logger logger = Logger
            .getLogger(SqlMapDAOFactory.class);
    
    private static final String SQL_MAP_CONFIG_XML = "perucuy/ibatis/sqlMapConfig.xml";
    
    private static DAOFactory daoFactory = new SqlMapDAOFactory();
    
    private static SqlMapClient sqlMap;
    static {
        try {
            logger.debug("cargando configuracion de iBatis:"
                    + SQL_MAP_CONFIG_XML);
            
            Reader reader = Resources.getResourceAsReader(SQL_MAP_CONFIG_XML);
            sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
            logger.debug("sqlmap obtenido:" + sqlMap);
        } catch (java.io.IOException ex) {
            logger.error(ex, ex);
        }
    }
    
    private SqlMapDAOFactory() {
        logger.debug("creando un SqlMapDAOFactory()");
    }
    
    public static DAOFactory getInstance() {
        logger.debug("solicitando un SqlMapDAOFactory");
        return daoFactory;
    }
    
    
    public TareaDAO getTareaDAO() {
        return SqlMapTareaDAO.getInstance();
    }
    
    public UsuarioDAO getUsuarioDAO() {
        return SqlMapUsuarioDAO.getInstance();
    }
    
    public ConsultaDAO getConsultaDAO() {
        return SqlMapConsultaDAO.getInstance();
    }
    
    public UbicacionDAO getUbicacionDAO() {
        return SqlMapUbicacionDAO.getInstance();
    }
    
    public RacionDAO getRacionDAO() {
        return SqlMapRacionDAO.getInstance();
    }
    public NucleoDAO getNucleoDAO() {
        return SqlMapNucleoDAO.getInstance();
    }
    public PartoDAO getPartoDAO() {
        return SqlMapPartoDAO.getInstance();
    }
    public ParametroDAO getParametroDAO() {
        return SqlMapParametroDAO.getInstance();
    }
    public NutrienteDAO getNutrienteDAO() {
        return SqlMapNutrienteDAO.getInstance();
    }
    public AlertaDAO getAlertaDAO() {
        return SqlMapAlertaDAO.getInstance();
    }
    public ReproductoraDAO getReproductoraDAO() {
        return SqlMapReproductoraDAO.getInstance();
    }
   
    public static SqlMapClient getSqlMap() {
        logger.debug("solicitando SqlMapClient");
        return sqlMap;
    }
}
